package com.yunke.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yunke.dto.vip.YunkeVipBuyDto;
import com.yunke.entity.YunkeLevel;
import com.yunke.vo.vip.YunkeVipLevelVo;

import java.util.List;
import java.util.Map;

/**
 * VIP会员Service接口
 * 
 * @author yunke
 * @since 1.0.0
 */
public interface YunkeVipService extends IService<YunkeLevel> {

    /**
     * 获取VIP等级列表
     * 
     * @return VIP等级列表
     */
    List<YunkeVipLevelVo> getVipLevelList();

    /**
     * 获取VIP等级详情
     * 
     * @param levelId 等级ID
     * @return VIP等级详情
     */
    YunkeVipLevelVo getVipLevelDetail(Long levelId);

    /**
     * 购买VIP
     * 
     * @param vipBuyDto 购买VIP请求
     * @return 购买结果
     */
    Map<String, Object> buyVip(YunkeVipBuyDto vipBuyDto);

    /**
     * 创建VIP支付订单
     * 
     * @param vipBuyDto 购买VIP请求
     * @return 订单信息
     */
    Map<String, Object> createVipOrder(YunkeVipBuyDto vipBuyDto);

    /**
     * 查询VIP订单状态
     * 
     * @param orderNo 订单号
     * @return 订单状态
     */
    Map<String, Object> getVipOrderStatus(String orderNo);

    /**
     * 获取我的VIP信息
     * 
     * @return VIP信息
     */
    Map<String, Object> getMyVipInfo();

    /**
     * 卡密兑换VIP
     * 
     * @param camiCode 卡密代码
     * @return 兑换结果
     */
    Map<String, Object> exchangeVipCard(String camiCode);

    /**
     * 获取VIP购买记录
     * 
     * @param current 当前页码
     * @param size 每页大小
     * @return 购买记录
     */
    Page<Map<String, Object>> getVipOrderList(Long current, Long size);

    /**
     * 检查VIP权益
     * 
     * @param privilege 权益类型
     * @return 权益状态
     */
    Map<String, Object> checkVipRights(String privilege);

    /**
     * 生成VIP卡密
     * 
     * @param levelId 等级ID
     * @param count 生成数量
     * @param validDays 有效天数
     * @return 生成结果
     */
    Map<String, Object> generateVipCard(Long levelId, Integer count, Integer validDays);

    /**
     * 获取VIP统计信息
     * 
     * @return 统计信息
     */
    Map<String, Object> getVipStatistics();

    /**
     * VIP续费
     * 
     * @param renewDto 续费请求
     * @return 续费结果
     */
    Map<String, Object> renewVip(YunkeVipBuyDto renewDto);

    /**
     * VIP退款申请
     * 
     * @param orderNo 订单号
     * @param reason 退款原因
     * @return 申请结果
     */
    Map<String, Object> refundVip(String orderNo, String reason);
} 